package main

import (
	"GOChat/golang-tcpserver/server/HTTPServer"
	"bufio"
	"fmt"
	"log"
	"net"
)

func main() {
	//创建IP和端口用于监听(创建TCP/IP 连接)
	ipConn, err := net.Listen("tcp", "0.0.0.0:9080") //任意地址都可以访问
	if err != nil {
		log.Fatal(err)
		return
	}
	//将TCP进行阻塞
	for true {
		conn, err := ipConn.Accept() //如果有客户端与服务端建立连接
		if err != nil {
			log.Fatal(err)
			return
		}
		//调用处理函数处理客户的连接
		go ParserTCP(conn)
	}
}

// ParserTCP 创建一个TCP连接处理函数
func ParserTCP(con net.Conn) {
	//defer func(con net.Conn) {
	//	err := con.Close()
	//	if err != nil {
	//	}
	//}(con)
	//进行阻塞式处理
	for true {
		reader := bufio.NewReader(con) //创建一个io的缓冲读取器
		//创建字节数组，然后使用其全切片进行读取
		var ByteIO [1024]byte
		n, err := reader.Read(ByteIO[:])
		if err != nil {
			log.Fatal(err)
			return
		}
		//将字节数组转化为字符串
		TextString := string(ByteIO[:n])
		//TextString = "这是服务端发送的：" + TextString
		fmt.Println("这是客服端发送的信息： ", TextString)
		//对信息进行处理，返回对应的信息
		yun, err := HTTPServer.HttpQinYun(TextString)
		if err != nil {
			log.Fatal(err)
			return
		}
		serParser := yun["content"]
		Wq, err := con.Write([]byte(serParser))
		//[]数据类型(数据)  -->可以将数据添加到切片中
		if err != nil {
			log.Fatal(err)
			return
		}
		fmt.Println("数据处理成功，已发送对应内容： ", Wq)
	}
}
